package org.unisinos.gc.form;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
import org.unisinos.gc.exception.GCValidationException;
import org.unisinos.gc.validation.ArtigoValidation;
import org.unisinos.gc.vo.Area;
import org.unisinos.gc.vo.Artigo;
import org.unisinos.gc.vo.Autor;
import org.unisinos.gc.vo.SubArea;

public class ArtigoForm extends ActionForm {

	/**
	 * 
	 */
	private static final long serialVersionUID = 2263910692976322852L;
	
	private String codigo;
	private String nome;
	private String codigoSubarea;
	private String[] codCoautores;
	private String dataCriacao;
	private String resumo;
	private String resumoAbstract;
	private FormFile file;
	private String urlFile;
	
	private String nomeAutor;
	private List<Autor> autores;
	
	public List<Autor> getAutores() {
		return autores;
	}
	public void setAutores(List<Autor> autores) {
		this.autores = autores;
	}
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String[] getCodCoautores() {
		return codCoautores;
	}
	public void setCodCoautores(String[] codCoautores) {
		this.codCoautores = codCoautores;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCodigoSubarea() {
		return codigoSubarea;
	}
	public void setCodigoSubarea(String codigoSubarea) {
		this.codigoSubarea = codigoSubarea;
	}
	public String getDataCriacao() {
		return dataCriacao;
	}
	public void setDataCriacao(String dataCriacao) {
		this.dataCriacao = dataCriacao;
	}
	public String getResumo() {
		return resumo;
	}
	public void setResumo(String resumo) {
		this.resumo = resumo;
	}
	public String getResumoAbstract() {
		return resumoAbstract;
	}
	public void setResumoAbstract(String resumoAbstract) {
		this.resumoAbstract = resumoAbstract;
	}
	public FormFile getFile() {
		return file;
	}
	public void setFile(FormFile file) {
		this.file = file;
	}
	public String getNomeAutor() {
		return nomeAutor;
	}
	public void setNomeAutor(String nomeAutor) {
		this.nomeAutor = nomeAutor;
	}
	public String getUrlFile() {
		return urlFile;
	}
	public void setUrlFile(String urlFile) {
		this.urlFile = urlFile;
	}
	public void parseArtigo(Artigo artigo) {
		this.codigo = String.valueOf(artigo.getCodigo());
		this.nome = artigo.getNome();
		this.nomeAutor = artigo.getAutor().getNome();
		this.codigoSubarea = String.valueOf(artigo.getSubarea().getCodigo());
		this.dataCriacao = DateFormatUtils.format(artigo.getCriacao(), "dd/MM/yyyy");
		this.resumo = artigo.getResumo();
		this.resumoAbstract = artigo.getResumoAbstract();
		this.urlFile = artigo.getUrlFile();
	}
	
	public Artigo toArtigo() throws GCValidationException {
		ArtigoValidation.validaForm(this);
		Artigo artigo = new Artigo();
		if(StringUtils.isNotEmpty(this.codigo)) {
			artigo.setCodigo(Integer.parseInt(this.codigo));
		}
		artigo.setNome(this.nome);
		artigo.setResumo(this.resumo);
		artigo.setResumoAbstract(this.resumoAbstract);
		if (this.file != null && StringUtils.isNotEmpty(this.file.getFileName())) {
			artigo.setFile(this.file);
			artigo.setUrlFile(this.file.getFileName());
		} else {
			artigo.setUrlFile(this.urlFile);	
		}
		
		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		try {
			artigo.setCriacao(format.parse(this.dataCriacao));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		SubArea subarea = new SubArea(null, Integer.parseInt(this.codigoSubarea), null);
		artigo.setSubarea(subarea);
		
		return artigo;
	}
	
	public void clear() {
		this.codigo = "";
		this.codigoSubarea = "";
		this.dataCriacao = "";
		this.file = null;
		this.nome = "";
		this.resumo = "";
		this.resumoAbstract = "";
		this.urlFile = "";
		this.codCoautores = new String[0];
		this.nomeAutor = null;
	}
	
}
